tables.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { NextApiRequest, NextApiResponse } from 'next'
  2. import { fetchGet } from '@/data/fetchers'
  3. import { constructHeaders } from '@/lib/api/apiHelpers'
  4. import apiWrapper from '@/lib/api/apiWrapper'
  5. import { PG_META_URL } from '@/lib/constants'
  6. export default (req: NextApiRequest, res: NextApiResponse) =>
  7. apiWrapper(req, res, handler, { withAuth: true })
  8. async function handler(req: NextApiRequest, res: NextApiResponse) {
  9. const { method } = req
  10. switch (method) {
  11. case 'GET':
  12. return handleGetAll(req, res)
  13. default:
  14. res.setHeader('Allow', ['GET'])
  15. res.status(405).json({ error: { message: `Method ${method} Not Allowed` } })
  16. }
  17. }
  18. /**
  19. * Construct the pgMeta redirection url passing along the filtering query params
  20. * @param req
  21. * @param endpoint
  22. */
  23. export function getPgMetaRedirectUrl(req: NextApiRequest, endpoint: string) {
  24. const query = Object.entries(req.query).reduce((query, entry) => {
  25. const [key, value] = entry
  26. if (Array.isArray(value)) {
  27. for (const v of value) {
  28. query.append(key, v)
  29. }
  30. } else if (value) {
  31. query.set(key, value)
  32. }
  33. return query
  34. }, new URLSearchParams())
  35. let url = `${PG_META_URL}/${endpoint}`
  36. if (Object.keys(req.query).length > 0) {
  37. url += `?${query}`
  38. }
  39. return url
  40. }
  41. const handleGetAll = async (req: NextApiRequest, res: NextApiResponse) => {
  42. const headers = constructHeaders(req.headers)
  43. const response = await fetchGet(getPgMetaRedirectUrl(req, 'tables'), { headers })
  44. if (response.error) {
  45. const { code, message } = response.error
  46. return res.status(code).json({ message })
  47. } else {
  48. return res.status(200).json(response)
  49. }
  50. }